package real.ZSBank;

import java.util.List;
import java.util.concurrent.BlockingQueue;

public class Wash {
    //洗牌在生活中十分常见，现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌，
    // 从上到下依次是第1张，第2张，第3张一直到第2n张。首先，我们把这2n张牌分成两堆，左手拿着第1张到第n张（上半堆），
    // 右手拿着第n+1张到第2n张（下半堆）。接着就开始洗牌的过程，先放下右手的最后一张牌，再放下左手的最后一张牌，
    // 接着放下右手的倒数第二张牌，再放下左手的倒数第二张牌，直到最后放下左手的第一张牌。接着把牌合并起来就可以了。
    // 例如有6张牌，最开始牌的序列是1,2,3,4,5,6。首先分成两组，左手拿着1,2,3；右手拿着4,5,6。
    // 在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后，我们按照从上往下的顺序看这组牌，就变成了序列1,4,2,5,3,6。
    // 现在给出一个原始牌组，请输出这副牌洗牌k次之后从上往下的序列
    //// 第一次数字代表有N张牌，第二个数字代表洗牌K次，后面跟N个数字表示N张牌。
    //7 2 1 2 3 4 5 6 7
    public int[] wash(int[] nums, int k){
        int n = nums.length - 1;
        int mid = n / 2;
        for(int i = 0; i < k; i++){
            int[] temp = new int[nums.length];
            for(int j = 0; j < nums.length; j ++){
                if(j <= mid){
                    temp[j * 2] = nums[j];
                }else {
                    int target = (j - mid - 1) * 2 + 1;
                    temp[target] = nums[j];
                }
            }
            nums = temp;
        }
        return nums;
    }

    static void testWash() {
        Wash wash = new Wash();
        int[] input = {1, 2, 3, 4, 5, 6};
        int k = 1;
        int[] expected = {1, 4, 2, 5, 3, 6};
        int[] wash1 = wash.wash(input, k);
        for (int i : wash1) {
            System.out.println(i);
        }

        int[] input2 = {1, 2, 3, 4, 5, 6};
        int k2 = 2;
        int[] expected2 = {1, 5, 4, 2, 3, 6};
        int[] wash2 = wash.wash(input2, k2);
        for (int i : wash2) {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        //testWash();
        int[] arr = {1, 2, 3};
        System.out.println(arr.getClass().isArray());
    }
}
